{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "af78e5fa",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cuda\n"
     ]
    }
   ],
   "source": [
    "import torch\n",
    "\n",
    "# if GPU is to be used\n",
    "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
    "print(device)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "429f192f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(0.9999999999999998)"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "q_num=100\n",
    "weight = np.random.dirichlet(alpha=[1.0]*q_num)\n",
    "\n",
    "weight.sum()  # Should be close to 1.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "80ab2985",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "拟合的多项式系数: [ 2.30549953e-04  3.88991253e-01 -2.87920929e+02]\n"
     ]
    },
    {
     "data": {
      "image/png": "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x454e3uzdu1a57n9+/dz6NAhIiMjAYiMjGTPnj2kp6c7x8TFxREQEEBERIRzzOnvUTSm6D1EROQsdu+Gzp1h82aMwEC2PvssDu1JJtWUpTNEEydOpE+fPjRp0oSsrCzmz59PfHw8q1atIjAwkFGjRjF+/Hjq1atHQEAADz/8MJGRkXTt2hWAXr16ERERwbBhw5g2bRqpqalMmjSJmJgY5wzP6NGjmTlzJhMmTOC+++5j3bp1LFiwgOXLl1vZuoiIa/viCxg6FLKz4corKVi0iN8PHrS6KpFKU+4ZohEjRrBx48YK+ebp6ekMHz6c5s2b06NHD7755htWrVpFz549AZg+fTq33HILgwYNolu3boSGhrJo0SLn13t5ebFs2TK8vLyIjIxk6NChDB8+nOeee845Jjw8nOXLlxMXF0fbtm155ZVXePfdd/XIvYhIaQwDpk419yTLzoabb4atW6F5c6srE6lU5Z4hysjIICoqiqZNm3LvvfcyYsQILr300gv65u+99945z/v5+TFr1ixmzZp11jFNmzZlxYoV53yf7t27s2vXrguqUUTENk6ehFGj4JNPzNcxMTB9urnwops+di1SVuWeIVqyZAm//fYbY8aM4bPPPuOyyy6jT58+fP755267ToGIiO399ht062aGoRo1YM4cmDnTDEMiNnBBN1VfcskljB8/nu+++45t27bRrFkzhg0bRsOGDXnsscf46aefKrpOERGpLNu2wTXXwI4dUL8+xMXBQw9ZXZVIlbqop8xSUlKIi4sjLi4OLy8v+vbty549e4iIiGD69OkVVaOIiFSWf//b3HYjJQWuvhq2bzf3KBOxmXIHovz8fP7zn/9wyy230LRpUxYuXMi4ceM4fPgwH374IWvWrGHBggXFbmwWEREXU1gIjz8OI0ZAbi4MHAgJCXD55VZXJmKJct9UHRYWhsPh4O6772b79u20a9euxJibbrqpxJYbIiLiIv74A+65B1auNF8/8wxMmaKd6sXWyh2Ipk+fzp133omfn99ZxwQFBZGcnHxRhYmISCXYtw8GDIADB6BmTfjwQ7jzTqurErFcuQPRsGHDKqMOERGpbF9+aS62mJUFTZrAkiXQvr3VVYm4BM2PiohUdw4HPP+8OTOUlWXeRL1jh8KQyGks39xVREQqUXY2jBwJ//mP+XrsWHj1Va0vJHIGBSIRkerq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/Px855i4uDiaN2/uEpeMyurXX3/lyJEjhIWFAe7du2EYjB07lsWLF7Nu3boSl/Uq6mc9MjKy2HsUjTn9fg0rnK//0iQmJgIU+/zdtf8zORwOcnNzq/3nfjZF/ZemOn3uPXr0YM+ePSQmJjp/derUiSFDhjj/bMfPvwSr7+p2FX/729+M+Ph4Izk52di8ebMRFRVlNGjQwEhPTzcMw3wksUmTJsa6deuMHTt2GJGRkUZkZKTz64seSezVq5eRmJhorFy50rjkkktc9rH7rKwsY9euXcauXbsMwHj11VeNXbt2Gf/73/8MwzAfuw8KCjK++OILY/fu3caAAQNKfey+ffv2xrZt24xNmzYZV155ZbFHz48dO2aEhIQYw4YNM5KSkoxPP/3U8Pf3t/zR83P1npWVZTz++ONGQkKCkZycbKxZs8bo0KGDceWVVxo5OTnO93DX3seMGWMEBgYa8fHxxR4vPnHihHNMRfysFz1++8QTTxjff/+9MWvWLJd4/PZ8/R84cMB47rnnjB07dhjJycnGF198YVx++eVGt27dnO/hrv0/9dRTxoYNG4zk5GRj9+7dxlNPPWV4eHgYq1evNgyjen/uhnHu/qvz5342Zz5VV90//7JQIPrTXXfdZYSFhRk+Pj7GpZdeatx1113GgQMHnOdPnjxp/PWvfzXq1q1r+Pv7G7fddpuRkpJS7D1+/vlno0+fPkbNmjWNBg0aGH/729+M/Pz8qm6lTNavX28AJX6NGDHCMAzz0ftnnnnGCAkJMXx9fY0ePXoY+/fvL/YeR44cMe6++26jdu3aRkBAgHHvvfcaWVlZxcZ89913xvXXX2/4+voal156qfHSSy9VVYtnda7eT5w4YfTq1cu45JJLDG9vb6Np06bGAw88UOxRU8Nw395L6xswPvjgA+eYivpZX79+vdGuXTvDx8fHuPzyy4t9D6ucr/9Dhw4Z3bp1M+rVq2f4+voazZo1M5544oli69EYhnv2f9999xlNmzY1fHx8jEsuucTo0aOHMwwZRvX+3A3j3P1X58/9bM4MRNX98y8LD8MwjKqbjxIRERFxPbqHSERERGxPgUhERERsT4FIREREbE+BSERERGxPgUhERERsT4FIREREbE+BSERERGxPgUhERERsT4FIREREbE+BSERERGxPgUhEbOn3338nNDSUF1980Xlsy5Yt+Pj4lNixW0SqP+1lJiK2tWLFCgYOHMiWLVto3rw57dq1Y8CAAbz66qtWlyYiVUyBSERsLSYmhjVr1tCpUyf27NnDN998g6+vr9VliUgVUyASEVs7efIkrVq14pdffmHnzp20bt3a6pJExAK6h0hEbO3gwYMcPnwYh8PBzz//bHU5ImIRzRCJiG3l5eXRuXNn2rVrR/PmzXnttdfYs2cPwcHBVpcmIlVMgUhEbOuJJ57g888/57vvvqN27drceOONBAYGsmzZMqtLE5EqpktmImJL8fHxvPbaa3z00UcEBATg6enJRx99xNdff83s2bOtLk9EqphmiERERMT2NEMkIiIitqdAJCIiIranQCQiIiK2p0AkIiIitqdAJCIiIranQCQiIiK2p0AkIiIitqdAJCIiIranQCQiIiK2p0AkIiIitqdAJCIiIranQCQiIiK29/+dQqJmECVX5wAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "拟合的多项式为:\n",
      "           2\n",
      "0.0002305 x + 0.389 x - 287.9\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 示例数据\n",
    "x = np.array([645, 750, 1280, 1480, 2010, 2183, 2320,3700,4200]) # rsp\n",
    "y = np.array([50, 180, 440, 868, 1016, 1780, 2380, 3840, 5680]) # force\n",
    "\n",
    "# 三次多项式拟合\n",
    "coefficients = np.polyfit(x, y, 2)  # 返回多项式系数 [a, b, c, d] 对应 ax^3 + bx^2 + cx + d\n",
    "\n",
    "# 创建多项式函数\n",
    "poly_func = np.poly1d(coefficients)\n",
    "\n",
    "print(\"拟合的多项式系数:\", coefficients)\n",
    "\n",
    "# 生成拟合曲线的x值\n",
    "x_fit = np.linspace(x[0], x[-1], 100)\n",
    "y_fit = poly_func(x_fit)\n",
    "\n",
    "# 绘图\n",
    "plt.scatter(x, y, label='原始数据')\n",
    "plt.plot(x_fit, y_fit, 'r', label='三次多项式拟合')\n",
    "plt.legend()\n",
    "plt.xlabel('x')\n",
    "plt.ylabel('y')\n",
    "plt.title('三次多项式拟合')\n",
    "plt.grid(True)\n",
    "plt.show()\n",
    "\n",
    "# 输出拟合结果\n",
    "print(\"拟合的多项式为:\")\n",
    "print(poly_func)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "drl",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.18"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
